#include <stdio.h>

#if 0
int main(int argc, char const *argv[])
{
/*
    char          a = 10;
    short         b = 10;
    int           c = 10;
    long          d = 10;
    long int      e = 10 ;
    long long     f = 10 ;
    float         g = 10.1 ;
    double        h = 10.1 ;
    long double   i = 10.1 ;

    printf("sizeof(char         )=%d\n",sizeof(char));
    printf("sizeof(a            )=%d\n",sizeof(a));

    printf("sizeof(short        )=%d\n",sizeof(short));
    printf("sizeof(b            )=%d\n",sizeof(b));

    printf("sizeof(int          )=%d\n",sizeof(int));
    printf("sizeof(c            )=%d\n",sizeof(c));

    printf("sizeof(long         )=%d\n",sizeof(long ));
    printf("sizeof(d            )=%d\n",sizeof(d));

    printf("sizeof(long int     )=%d\n",sizeof(long int));
    printf("sizeof(e            )=%d\n",sizeof(e));

    printf("sizeof(long long    )=%d\n",sizeof(long long));
    printf("sizeof(f            )=%d\n",sizeof(f));

    printf("sizeof(float        )=%d\n",sizeof(float));
    printf("sizeof(g            )=%d\n",sizeof(g));

    printf("sizeof(double       )=%d\n",sizeof(double));
    printf("sizeof(h            )=%d\n",sizeof(h));

    printf("sizeof(long double  )=%d\n",sizeof(long double));
    printf("sizeof(i            )=%d\n",sizeof(i));


    int x = 1,y = 0,z = 0;
    x += y ==z, y=x + 2, z=x+y+z > 0;
    printf("x=%d y=%d z=%d\n",x,y,z);
    //x=x+1 ;  y=2+2 ;  z=8 > 0 ;
    //x=2;y=4;z=1 

    char a1 = 'A';
    char a2 = 'B';
    char a3 = 'a';
    char a4 = 66+32;

    char b1 = 10;
    char b2 ='\n';

    putchar(a1);
    putchar(a2);

    putchar(b1);
    putchar(b2);

    putchar(a3);
    putchar(a4);

    printf("hello word\n");//输出表没有，直接输出格式字符串
    int x=10,y=20,z=30;
    printf("x=%d\n",x);//输出表有1个
    printf("x=%d,y=%d,z=%d\n",x,z);//输出表有多个，用逗号隔开，普通字符原样输出

    int a=571;
    printf("a=%d\n",a);//带符号的十进制整数，表示a以整数的形式输出
    printf("a=%i\n",a);//带符号的十进制整数，表示a以整数的形式输出
    printf("a=%x\n",a);//无符号的十六进制整数，表示a以整数的形式输出
    printf("a=%X\n",a);//无符号的十六进制整数，表示a以整数的形式输出
    printf("a=%u\n",a);//无符号的十进制整数，表示a以整数的形式输出
    printf("a=%o\n",a);//无符号的八进制整数，表示a以整数的形式输出

    a = 'Y';
    printf("a=%c\n",a);//输出一个字符，表示a以字符的形式输出，等价于 putchar
    printf("%s\n","goodbye");//输出一个字符串，表示a以字符串的形式输出

    float c = 567.789;
    printf("c=%e\n",c);//指数形式浮点小数，小写e
    printf("c=%E\n",c);//指数形式浮点小数，大写E
    printf("c=%f\n",c);//小数形式浮点小数
    printf("c=%g\n",c);//e和f中较短一种
    
    printf("&c=%p\n",&c);//&c 是变量的地址，输出地址要使用%p，以地址形式输出
    printf("%%\n");//使用%%，输出%本身

*/
// m 宽度
    int a = 567;
    printf("a=%d\n", a);            // 按照10进制输出整数
    printf("a=%8d\n", a);           // 按照10进制输出整数, 输出宽度8个位置,不够左补5个空格
    printf("a=%2d\n", a);           // 按照10进制输出整数, 输出宽度2个位置,超出设定的位置 , 按照实际输出
    printf("str=%8s\n", "goodbye"); // 输出一个字符串 , 输出宽度8个位置,不够左补1个空格
    printf("str=%4s\n", "goodbye"); // 输出一个字符串 , 输出宽度4个位置,超出设定的位置 , 按照实际输出

    // .n
    // 对于实数 , 保留小数点后面的位数
    float b = 456.789;
    printf("b=%f\n", b);    // 输出一个实数, 小数点后面保留6位
    printf("b=%.2f\n", b);  // 输出一个实数, 小数点后面保留2位, 四舍五入
    printf("b=%.0f\n", b);  // 输出一个实数, 小数点后面保留0位, 四舍五入
    printf("b=%8.2f\n", b); // 输出一个实数, 输出宽度8,小数点后面保留2位, 四舍五入, 不够左补2个空格
    printf("b=%4.2f\n", b); // 输出一个实数, 输出宽度8,小数点后面保留2位, 四舍五入, 超出设定的位置 , 按照实际输出

    // 对于字符串, 控制字符串输出的个数
    printf("b=%.3s\n", "goodbye");  // 输出一个字符串 , 字符串输出3个有效字符
    printf("b=%.3s\n", "goodbye");  // 输出一个字符串 , 字符串输出3个有效字符
    printf("b=%8.3s\n", "goodbye"); // 输出一个字符串 , 字符串输出3个有效字符 , 输出宽度8, 不够左补5个空格
    printf("b=%3.4s\n", "goodbye"); // 输出一个字符串 , 字符串输出4个有效字符 , 输出宽度3, 超出设定的位置 , 按照实际输出

    // #
    printf("a=%o\n", a);  // 按照8进制输出整数
    printf("a=%#o\n", a); // 按照8进制输出整数, 会在输出时加上0的前缀
    printf("a=%#x\n", a); // 按照8进制输出整数, 会在输出时加上0x的前缀

    // +
    printf("a=%+d\n", a); // 按照10进制输出整数, 带上符号位, 正数+ , 负数-
    a = -123;
    printf("a=%+d\n", a); // 按照10进制输出整数, 带上符号位, 正数+ , 负数-

    // - 默认右对齐, 可以使用-来实现左对齐
    printf("str=%8s\n", "goodbye");  // 右对齐, 左补1个空格
    printf("str=%-8s\n", "goodbye"); // 左对齐, 右补1个空格
    printf("a=%8d\n", a);            // 右对齐, 左补4个空格
    printf("a=%-8d\n", a);           // 左对齐, 右补4个空格

    // 0 左补0 , 不补空格 , 只限于右对齐的时候, 因为左对齐右补0会产生混乱
    // 0 不能和- 同时使用 
    //printf("str=%08s\n", "goodbye");  // 这种补0 没有意义  错误用法 
    printf("a=%08d\n", a);            // 右对齐, 左补4个空格
    //printf("a=%-08d\n", a);            // 没有意义  错误用法 
    
    printf("a=%ld\n",a) ; //  long  类型的数据 
    printf("b=%lf\n",b) ; //  double  类型的数据 




    return 0;
}


#else

int main(int argc, char const *argv[])
{
    char ch;
    while(1)
    {
        ch = getchar();
        if((ch <= 'z')&&(ch >= 'a'))
        {
            ch = ch - ' ';
            //去除垃圾字符
            scanf("%*[^\n]");
            scanf("%*c");
            
        }
        else if((ch <= 'Z')&&(ch >= 'A'))
        {
            ch = ch + ' ';
            //去除垃圾字符
            scanf("%*[^\n]");
            scanf("%*c");
        }
        printf("%c---->%d\n",ch,ch);
    }
    return 0;
}


#endif
